package cn.com.w.common.Excepiton;

import cn.com.w.common.Utils.LogUtils;
import cn.com.w.common.VO.BaseVO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;

/**
 * @author w
 * @Description: 全局异常抛错
 * @DateTime: 2025 05 07 19:07
 **/
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<BaseVO<?>> handleException(Exception ex, WebRequest request) {
        // 记录异常日志
        LogUtils.getLogger().error("发生异常: {}", ex.getMessage(), ex);

        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body(BaseVO.builder()
                        .code(500)
                        .message("系统异常")
                        .error(ex.getMessage())
                        .build());
    }

//    // 处理所有未被其他异常处理器捕获的异常
//    @ExceptionHandler(Exception.class)
//    public ResponseEntity<BaseVO<?>> handleGeneralException(Exception e) {
//        return new ResponseEntity<>(BaseVO.builder()
//                .code(-1)
//                .error(e.getMessage())
//                .message("发生了未知错误，请稍后重试。")
//                .build(), HttpStatus.INTERNAL_SERVER_ERROR);
//    }
//
//    @ExceptionHandler(IllegalArgumentException.class)
//    public ResponseEntity<BaseVO<?>> handleIllegalArgumentException(IllegalArgumentException e) {
//        return new ResponseEntity<>(BaseVO.builder()
//                .code(-1)
//                .error(e.getMessage())
//                .message("输入的参数不合法,请检查后重新输入。")
//                .build(), HttpStatus.BAD_REQUEST);
//    }
//
//    @ExceptionHandler(NullPointerException.class)
//    public ResponseEntity<BaseVO<?>> handlerNullPointException(NullPointerException e) {
//        return new ResponseEntity<>(BaseVO.builder()
//                .code(-1)
//                .error(e.getMessage())
//                .message("发生空指针异常,请进行排查。")
//                .build(), HttpStatus.BAD_REQUEST);
//    }
//
//    @ExceptionHandler(HttpMessageNotReadableException.class)
//    public ResponseEntity<BaseVO<?>> handleJsonParseError(HttpMessageNotReadableException e) {
//        return new ResponseEntity<>(BaseVO.builder()
//                .code(-1)
//                .error("JSON 格式错误，请检查输入内容")
//                .message("JSON 格式错误")
//                .build(), HttpStatus.BAD_REQUEST);
//    }
//
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public ResponseEntity<BaseVO<?>> handleValidationErrors(MethodArgumentNotValidException e) {
//        return new ResponseEntity<>(BaseVO.builder()
//                .code(-1)
//                .error("参数验证失败：" + e.getBindingResult().getAllErrors())
//                .message("参数验证失败")
//                .build(), HttpStatus.BAD_REQUEST);
//    }
}